Laravel 5
Laravelの5.x系
frameworkのコードを読む
Laravelソースコードの歩き方
Laravelのソースコードはsrc/Illuminateにある
composer.jsonで名前空間が決められている
Laravelはモジュールが細分化されているので、利用しているモジュール自体も名前空間が切ってある
laravel/frameworkの名前空間と衝突しないようになっている
例:https://github.com/laravel/framework/blob/6ff9df42c8a6d9230bbaca5171a5d6253fa71890/src/Illuminate/Auth/composer.json#L25
各コンポーネントの初期化はService providersで行われる
RountingコンポーネントならRoutingServiceProvirer.phpで行われる
LaravelのContractsはインターフェイスのこと
Illuminate/Contracts以下にはinterfaceがたくさん定義されている
LaravelのContractsとkeyの対応づけはIlluminate\Foundation\Applicationで行われている
当該箇所はAliasを登録している
テストを見ると、$aliases(インターフェース等のクラス名)が$key(app, authなどの文字列)に対応して、containerからは$keyを入力にインスタンスを保持するようだ
getAlias()ではappなどのkeyが入ってきたらそのままそれを返して、クラス名が入ってきたら対応するkeyに変換している
Alias(key)と実装クラスの対応付
$keyに対応する実装クラスはconfig/app.php設定ファイルのaliasに書いてある
$app->make()でクラスを作成するときの流れ
Illuminate\Container\Container::resolve()でContractに対応する具象クラスを取得している
では、resolve()で取得できる具象クラスの初期化はどこでやっている?
各Service Providersで初期化している。registerでインターフェースに対する具象クラスをサービスコンテナにつめている
Service providersのドキュメントに書いてある
Laravel5のアーキテクチャから学ぶより良いクラス設計 - Qiita